﻿//-------------------------------------------------------------------------------------------------
// <copyright file="SpellHandlers.cs" company="Anthony Adam">
// Copyright (c) Anthony Adam 2012. All rights reserved.
// </copyright>
//-------------------------------------------------------------------------------------------------
// ReSharper disable once CheckNamespace
namespace SuperStarRounds
{
  using System.Windows.Forms;

  using Models;

  /// <summary>
  /// Utility class containing the spell choice control population functions.
  /// </summary>
  public static class SpellHandlers
  {
    /// <summary>
    /// Populates the spell sub school choices.
    /// </summary>
    /// <param name="school">The spell school who's sub schools are required</param>
    /// <param name="comboBox">The choice control to be populated</param>
    public static void SetSubSchoolList(string school, ComboBox comboBox)
    {
      comboBox.Items.Clear();
      switch (school)
      {
        case "abjuration":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(various schools)");

          comboBox.Items.Add("[chaotic]");
          comboBox.Items.Add("[evil]");
          comboBox.Items.Add("[fire]");
          comboBox.Items.Add("[force]");
          comboBox.Items.Add("[good]");
          comboBox.Items.Add("[lawful]");
          break;

        case "conjuration":
          comboBox.Items.Add("(calling)");
          comboBox.Items.Add("(creation)");
          comboBox.Items.Add("(creation or calling)");
          comboBox.Items.Add("(creation) [acid]");
          comboBox.Items.Add("(creation) [fire]");
          comboBox.Items.Add("(creation) [water]");
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(healing)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(summoning)");
          comboBox.Items.Add("(summoning) [air]");
          comboBox.Items.Add("(summoning) [earth]");
          comboBox.Items.Add("(summoning) [fire]");
          comboBox.Items.Add("(summoning) [water]");
          comboBox.Items.Add("(teleportation)");
          comboBox.Items.Add("(various schools)");
          break;

        case "divination":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(scrying)");
          comboBox.Items.Add("(various schools)");

          comboBox.Items.Add("[mind-affecting]");
          break;

        case "enchantment":
          comboBox.Items.Add("(charm) [language-dependent, mind-affecting, sonic]");
          comboBox.Items.Add("(charm) [mind-affecting]");
          comboBox.Items.Add("(compulsion) [fear, mind-affecting]");
          comboBox.Items.Add("(compulsion) [language-dependent, mind-affecting]");
          comboBox.Items.Add("(compulsion) [mind-affecting]");
          comboBox.Items.Add("(compulsion) [mind-affecting, sonic]");
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(various schools)");
          break;

        case "evocation":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(various schools)");

          comboBox.Items.Add("[air]");
          comboBox.Items.Add("[chaotic]");
          comboBox.Items.Add("[cold]");
          comboBox.Items.Add("[darkness]");
          comboBox.Items.Add("[earth]");
          comboBox.Items.Add("[electricity]");
          comboBox.Items.Add("[evil]");
          comboBox.Items.Add("[evil, sonic]");
          comboBox.Items.Add("[fire]");
          comboBox.Items.Add("[fire or cold]");
          comboBox.Items.Add("[force]");
          comboBox.Items.Add("[good]");
          comboBox.Items.Add("[lawful, sonic]");
          comboBox.Items.Add("[light]");
          break;

        case "illusion":
          comboBox.Items.Add("(figment)");
          comboBox.Items.Add("(glamer)");
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(pattern) [mind-affecting]");
          comboBox.Items.Add("(phantasm) [mind-affecting]");
          comboBox.Items.Add("(various schools)");
          break;

        case "necromancy":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(various schools)");

          comboBox.Items.Add("[death]");
          comboBox.Items.Add("[death, evil]");
          comboBox.Items.Add("[evil]");
          comboBox.Items.Add("[fear, mind-affecting]");
          break;

        case "transmutation":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(polymorph)");
          comboBox.Items.Add("(various schools)");

          comboBox.Items.Add("[air]");
          comboBox.Items.Add("[chaotic]");
          comboBox.Items.Add("[cold]");
          comboBox.Items.Add("[evil]");
          comboBox.Items.Add("[fire]");
          comboBox.Items.Add("[good]");
          comboBox.Items.Add("[lawful]");
          comboBox.Items.Add("[water]");
          break;

        case "universal":
          comboBox.Items.Add("(greater)");
          comboBox.Items.Add("(lesser)");
          comboBox.Items.Add("(various schools)");
          break;

        default: // Unrecognised school
          comboBox.Text = string.Empty;
          return;
      }

      comboBox.Text = string.Empty;
    }

    /// <summary>
    /// Main entry point for populating a spell choice control with spells for given content, level and school
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="level">The level of spells to populate</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    public static void ResetSpellsList(ContentInclusions settings, string level, string school, ComboBox comboBox)
    {
      comboBox.Items.Clear();
      switch (level)
      {
        case "Level 0":
          Level0Spells(settings, school, comboBox);
          break;
        case "Level 1":
          Level1Spells(settings, school, comboBox);
          break;
        case "Level 2":
          Level2Spells(settings, school, comboBox);
          break;
        case "Level 3":
          Level3Spells(settings, school, comboBox);
          break;
        case "Level 4":
          Level4Spells(settings, school, comboBox);
          break;
        case "Level 5":
          Level5Spells(settings, school, comboBox);
          break;
        case "Level 6":
          Level6Spells(settings, school, comboBox);
          break;
        case "Level 7":
          Level7Spells(settings, school, comboBox);
          break;
        case "Level 8":
          Level8Spells(settings, school, comboBox);
          break;
        case "Level 9":
          Level9Spells(settings, school, comboBox);
          break;
        default: // Unrecognised school
          comboBox.Text = string.Empty;
          return;
      }

      comboBox.Text = string.Empty;
    }

    /// <summary>
    /// Swap the spell selections if the second spell selections have choices and content and the first spell is blank.
    /// This is used to ensure only complete spell choices with a single blank choice set are shown in the application
    /// at any one time.
    /// </summary>
    /// <param name="comboBoxLevel1">First spell level choice control</param>
    /// <param name="comboBoxLevel2">Second spell level choice control</param>
    /// <param name="comboBoxSchool1">First spell school choice control</param>
    /// <param name="comboBoxSchool2">Second spell school choice control</param>
    /// <param name="comboBoxSpell1">First spell choice control</param>
    /// <param name="comboBoxSpell2">Second spell choice control</param>
    public static void SwapSpellSlotsIfEmptied(ComboBox comboBoxLevel1, ComboBox comboBoxLevel2, ComboBox comboBoxSchool1, ComboBox comboBoxSchool2, ComboBox comboBoxSpell1, ComboBox comboBoxSpell2)
    {
      if (!comboBoxSpell1.Text.Equals(string.Empty) || comboBoxSpell2.Text.Equals(string.Empty)) return;

      comboBoxLevel1.Text = comboBoxLevel2.Text;
      comboBoxSchool1.Text = comboBoxSchool2.Text;
      comboBoxSpell1.Text = comboBoxSpell2.Text;
      comboBoxLevel2.Text = comboBoxSchool2.Text = comboBoxSpell2.Text = string.Empty;
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 0 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level0Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, settings.CoreSorWiz, "arcane mark");
          AddSpell(comboBox, settings.CoreBarSorWiz, "prestidigitation");
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreBarCleDruSorWiz, "resistance");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "acid splash");
          AddSpell(comboBox, settings.CoreCleDru, "create water");
          AddSpell(comboBox, settings.CoreCleDru, "stabilize");
          AddSpell(comboBox, settings.CoreBar, "summon instrument");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreBarCleDruSorWiz, "detect magic");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "detect poison");
          AddSpell(comboBox, settings.CoreCleDru, "guidance");
          AddSpell(comboBox, settings.CoreBarDru, "know direction");
          AddSpell(comboBox, settings.CoreBarCleDruSorWiz, "read magic");
          AddSpell(comboBox, settings.AdvpgBarInq, "sift");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreBarSorWiz, "daze");
          AddSpell(comboBox, settings.CoreBar, "lullaby");
          AddSpell(comboBox, settings.AdvpgBar, "unwitting ally");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreBarSorWiz, "dancing lights");
          AddSpell(comboBox, settings.CoreBarDruSorWiz, "flare");
          AddSpell(comboBox, settings.CoreBarCleDruSorWiz, "light");
          AddSpell(comboBox, settings.AdvpgBarCleDruSorWizWit, "spark");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreBarSorWiz, "ghost sound");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreCleSorWiz, "bleed");
          AddSpell(comboBox, settings.CoreSorWiz, "disrupt undead");
          AddSpell(comboBox, settings.CoreSorWiz, "touch of fatigue");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.AdvpgInq, "brand");
          AddSpell(comboBox, settings.CoreBarSorWiz, "mage hand");
          AddSpell(comboBox, settings.CoreBarCleDruSorWiz, "mending");
          AddSpell(comboBox, settings.CoreBarSorWiz, "message");
          AddSpell(comboBox, settings.CoreBarSorWiz, "open / close");
          AddSpell(comboBox, settings.CoreCleDru, "purify food and drink");
          AddSpell(comboBox, settings.AdvpgWit, "putrefy food and drink");
          AddSpell(comboBox, settings.CoreCleDru, "virtue");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 1 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level1Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreBarRanSorWiz, "alarm");
          AddSpell(comboBox, settings.AdvpgAlcCleDruRanSorWizSum, "ant haul");
          AddSpell(comboBox, settings.AdvpgDruRan, "cloak of shade");
          AddSpell(comboBox, settings.CoreCleDruPalRanSorWiz, "endure elements");
          AddSpell(comboBox, settings.CoreCle, "entropic shield");
          AddSpell(comboBox, settings.AdvpgPal, "grace");
          AddSpell(comboBox, settings.CoreDruRan, "hide from animals");
          AddSpell(comboBox, settings.CoreCle, "hide from undead");
          AddSpell(comboBox, settings.CoreSorWiz, "hold portal");
          AddSpell(comboBox, settings.CoreBar, "obscure object");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "protection from chaos");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "protection from evil");
          AddSpell(comboBox, settings.CoreCleSorWiz, "protection from good");
          AddSpell(comboBox, settings.CoreCleSorWiz, "protection from law");
          AddSpell(comboBox, settings.CoreBarCle, "remove fear");
          AddSpell(comboBox, settings.CoreRan, "resist energy");
          AddSpell(comboBox, settings.CorePal, "resistance");
          AddSpell(comboBox, settings.CoreCle, "sanctuary");
          AddSpell(comboBox, settings.CoreSorWiz, "shield");
          AddSpell(comboBox, settings.CoreCle, "shield of faith");
          AddSpell(comboBox, settings.CoreBar, "undetectable alignment");
          AddSpell(comboBox, settings.AdvpgPal, "veil of positive energy");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CorePal, "create water");
          AddSpell(comboBox, settings.CoreBarCleDruPal, "cure light wounds");
          AddSpell(comboBox, settings.CoreRan, "delay poison");
          AddSpell(comboBox, settings.CoreBarSorWiz, "grease");
          AddSpell(comboBox, settings.AdvpgPal, "hero's defiance");
          AddSpell(comboBox, settings.AdvpgSum, "lesser rejuvenate eidolon");
          AddSpell(comboBox, settings.CorePal, "lesser restoration");
          AddSpell(comboBox, settings.CoreSorWiz, "mage armor");
          AddSpell(comboBox, settings.CoreSorWiz, "mount");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "obscuring mist");
          AddSpell(comboBox, settings.AdvpgBar, "solid note");
          AddSpell(comboBox, settings.AdvpgSorWiz, "stumble gap");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster I");
          AddSpell(comboBox, settings.CoreDruRan, "summon nature's ally I");
          AddSpell(comboBox, settings.CoreBarSorWiz, "unseen servant");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "comprehend languages");
          AddSpell(comboBox, settings.AdvpgDruRan, "detect aberration");
          AddSpell(comboBox, settings.CoreDruRan, "detect animals or plants");
          AddSpell(comboBox, settings.CoreCle, "detect chaos");
          AddSpell(comboBox, settings.CoreCle, "detect evil");
          AddSpell(comboBox, settings.CoreCle, "detect good");
          AddSpell(comboBox, settings.CoreCle, "detect law");
          AddSpell(comboBox, settings.CorePalRan, "detect poison");
          AddSpell(comboBox, settings.CoreBarSorWiz, "detect secret doors");
          AddSpell(comboBox, settings.CoreDruRan, "detect snares and pits");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "detect undead");
          AddSpell(comboBox, settings.CoreBarSorWiz, "identify");
          AddSpell(comboBox, settings.CorePalRan, "read magic");
          AddSpell(comboBox, settings.AdvpgRan, "residual tracking");
          AddSpell(comboBox, settings.AdvpgBar, "share language");
          AddSpell(comboBox, settings.CoreDruRan, "speak with animals");
          AddSpell(comboBox, settings.AdvpgBar, "timely inspiration");
          AddSpell(comboBox, settings.CoreSorWiz, "true strike");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreRan, "animal messenger");
          AddSpell(comboBox, settings.CoreCle, "bane");
          AddSpell(comboBox, settings.AdvpgBarWit, "beguiling gift");
          AddSpell(comboBox, settings.CoreClePal, "bless");
          AddSpell(comboBox, settings.AdvpgDruRan, "call animal");
          AddSpell(comboBox, settings.CoreDruRan, "calm animals");
          AddSpell(comboBox, settings.AdvpgPal, "challenge evil");
          AddSpell(comboBox, settings.CoreDruRan, "charm animal");
          AddSpell(comboBox, settings.CoreBarSorWiz, "charm person");
          AddSpell(comboBox, settings.CoreCle, "command");
          AddSpell(comboBox, settings.CoreBar, "hideous laughter");
          AddSpell(comboBox, settings.CoreBarSorWiz, "hypnotism");
          AddSpell(comboBox, settings.AdvpgWit, "ill omen");
          AddSpell(comboBox, settings.AdvpgPal, "knight's calling");
          AddSpell(comboBox, settings.CoreBar, "lesser confusion");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "memory lapse");
          AddSpell(comboBox, settings.AdvpgPal, "rally point");
          AddSpell(comboBox, settings.CoreBarSorWiz, "sleep");
          AddSpell(comboBox, settings.AdvpgInq, "wrath");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreSorWiz, "burning hands");
          AddSpell(comboBox, settings.AdvpgInq, "burst bonds");
          AddSpell(comboBox, settings.CoreClePal, "divine favor");
          AddSpell(comboBox, settings.CoreDru, "faerie fire");
          AddSpell(comboBox, settings.AdvpgBarDruSorWiz, "flare burst");
          AddSpell(comboBox, settings.CoreSorWiz, "floating disk");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "hydraulic push");
          AddSpell(comboBox, settings.CoreSorWiz, "magic missile");
          AddSpell(comboBox, settings.CoreDru, "produce flame");
          AddSpell(comboBox, settings.AdvpgBar, "saving finale");
          AddSpell(comboBox, settings.CoreSorWiz, "shocking grasp");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreSorWiz, "color spray");
          AddSpell(comboBox, settings.CoreBarSorWiz, "disguise self");
          AddSpell(comboBox, settings.AdvpgBar, "invigorate");
          AddSpell(comboBox, settings.CoreBarSorWiz, "magic aura");
          AddSpell(comboBox, settings.CoreBar, "magic mouth");
          AddSpell(comboBox, settings.AdvpgWit, "mask dweomer");
          AddSpell(comboBox, settings.CoreBarSorWiz, "silent image");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "vanish");
          AddSpell(comboBox, settings.CoreBarSorWiz, "ventriloquism");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "cause fear");
          AddSpell(comboBox, settings.CoreSorWiz, "chill touch");
          AddSpell(comboBox, settings.CoreCle, "curse water");
          AddSpell(comboBox, settings.CoreCle, "deathwatch");
          AddSpell(comboBox, settings.CoreCle, "doom");
          AddSpell(comboBox, settings.AdvpgRan, "hunter's howl");
          AddSpell(comboBox, settings.CoreCle, "inflict light wounds");
          AddSpell(comboBox, settings.CoreSorWiz, "ray of enfeeblement");
          AddSpell(comboBox, settings.AdvpgBar, "restful sleep");
          AddSpell(comboBox, settings.AdvpgSorWiz, "sculpt corpse");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "alter winds");
          AddSpell(comboBox, settings.CoreBarSorWiz, "animate rope");
          AddSpell(comboBox, settings.AdvpgDruRan, "aspect of the falcon");
          AddSpell(comboBox, settings.CoreClePal, "bless water");
          AddSpell(comboBox, settings.CorePal, "bless weapon");
          AddSpell(comboBox, settings.AdvpgAlc, "bomber's eye");
          AddSpell(comboBox, settings.AdvpgBar, "borrow skill");
          AddSpell(comboBox, settings.AdvpgSorWiz, "break");
          AddSpell(comboBox, settings.AdvpgDru, "bristle");
          AddSpell(comboBox, settings.AdvpgSorWiz, "crafter's curse");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "crafter's fortune");
          AddSpell(comboBox, settings.AdvpgBarCleRanSorWizWit, "dancing lantern");
          AddSpell(comboBox, settings.CoreSorWiz, "enlarge person");
          AddSpell(comboBox, settings.CoreDruRan, "entangle");
          AddSpell(comboBox, settings.CoreBarSorWiz, "erase");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "expeditious excavation");
          AddSpell(comboBox, settings.CoreBarSorWiz, "expeditious retreat");
          AddSpell(comboBox, settings.CoreBarSorWiz, "feather fall");
          AddSpell(comboBox, settings.AdvpgBarDruRan, "feather step");
          AddSpell(comboBox, settings.AdvpgPal, "ghostbane dirge");
          AddSpell(comboBox, settings.AdvpgRan, "glide");
          AddSpell(comboBox, settings.CoreDru, "goodberry");
          AddSpell(comboBox, settings.AdvpgRanSorWiz, "gravity bow");
          AddSpell(comboBox, settings.AdvpgPal, "honeyed tongue");
          AddSpell(comboBox, settings.AdvpgBar, "innocence");
          AddSpell(comboBox, settings.CoreDruRanSorWiz, "jump");
          AddSpell(comboBox, settings.AdvpgAlcDruRan, "keen senses");
          AddSpell(comboBox, settings.AdvpgRan, "lead blades");
          AddSpell(comboBox, settings.CoreDruRan, "longstrider");
          AddSpell(comboBox, settings.CoreDruRan, "magic fang");
          AddSpell(comboBox, settings.CoreCleDru, "magic stone");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "magic weapon");
          AddSpell(comboBox, settings.AdvpgAlcDruRan, "negate aroma");
          AddSpell(comboBox, settings.CoreDruRan, "pass without trace");
          AddSpell(comboBox, settings.CoreSorWiz, "reduce person");
          AddSpell(comboBox, settings.CoreDru, "shillelagh");
          AddSpell(comboBox, settings.AdvpgAlcDruSorWiz, "stone fist");
          AddSpell(comboBox, settings.AdvpgInqRan, "tireless pursuit");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "touch of gracelessness");
          AddSpell(comboBox, settings.AdvpgAlcDruSorWiz, "touch of the sea");
          AddSpell(comboBox, settings.AdvpgSum, "unfetter");
          AddSpell(comboBox, settings.CorePal, "virtue");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 2 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level2Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "arcane lock");
          AddSpell(comboBox, settings.AdvpgPal, "aura of greater courage");
          AddSpell(comboBox, settings.AdvpgPal, "bestow grace");
          AddSpell(comboBox, settings.AdvpgAntInqPal, "corruption resistance");
          AddSpell(comboBox, settings.CoreDru, "fire trap");
          AddSpell(comboBox, settings.AdvpgCle, "grace");
          AddSpell(comboBox, settings.CoreSorWiz, "obscure object");
          AddSpell(comboBox, settings.AdvpgPal, "paladin's sacrifice");
          AddSpell(comboBox, settings.CoreSorWiz, "protection from arrows");
          AddSpell(comboBox, settings.CoreRan, "protection from energy");
          AddSpell(comboBox, settings.CoreCleDruPalSorWiz, "resist energy");
          AddSpell(comboBox, settings.CoreClePal, "shield other");
          AddSpell(comboBox, settings.CoreClePal, "undetectable alignment");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "acid arrow");
          AddSpell(comboBox, settings.AdvpgRanSorWiz, "arrow eruption");
          AddSpell(comboBox, settings.AdvpgClePal, "blessing of courage and life");
          AddSpell(comboBox, settings.AdvpgSorWizSum, "create pit");
          AddSpell(comboBox, settings.CoreRan, "cure light wounds");
          AddSpell(comboBox, settings.CoreBarCle, "cure moderate wounds");
          AddSpell(comboBox, settings.CoreBarCleDruPal, "delay poison");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "dust of twilight");
          AddSpell(comboBox, settings.CoreDruSorWiz, "fog cloud");
          AddSpell(comboBox, settings.CoreBarSorWiz, "glitterdust");
          AddSpell(comboBox, settings.AdvpgClePal, "instant armor");
          AddSpell(comboBox, settings.CoreCleDru, "lesser restoration");
          AddSpell(comboBox, settings.AdvpgRan, "protective spirit");
          AddSpell(comboBox, settings.CoreClePal, "remove paralysis");
          AddSpell(comboBox, settings.AdvpgInqPal, "sacred bond");
          AddSpell(comboBox, settings.AdvpgDruRanSorWiz, "slipstream");
          AddSpell(comboBox, settings.AdvpgDruRanSorWiz, "stone call");
          AddSpell(comboBox, settings.AdvpgSum, "summon eidolon");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster II");
          AddSpell(comboBox, settings.CoreDruRan, "summon nature's ally II");
          AddSpell(comboBox, settings.CoreBarDruSorWiz, "summon swarm");
          AddSpell(comboBox, settings.AdvpgAlcWit, "vomit swarm");
          AddSpell(comboBox, settings.CoreSorWiz, "web");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreCle, "augury");
          AddSpell(comboBox, settings.AdvpgBar, "blood biography");
          AddSpell(comboBox, settings.AdvpgBarRanSorWiz, "create treasure map");
          AddSpell(comboBox, settings.CoreBarSorWiz, "detect thoughts");
          AddSpell(comboBox, settings.AdvpgDruRan, "eagle eye");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "elemental speech");
          AddSpell(comboBox, settings.CoreCle, "find traps");
          AddSpell(comboBox, settings.AdvpgInq, "follow aura");
          AddSpell(comboBox, settings.AdvpgBar, "gallant inspiration");
          AddSpell(comboBox, settings.AdvpgRan, "guiding star");
          AddSpell(comboBox, settings.AdvpgRan, "hunter's eye");
          AddSpell(comboBox, settings.CoreBarSorWiz, "locate object");
          AddSpell(comboBox, settings.CoreSorWiz, "see invisibility");
          AddSpell(comboBox, settings.AdvpgCleDruSorWiz, "share language");
          AddSpell(comboBox, settings.CoreRan, "speak with plants");
          AddSpell(comboBox, settings.CoreCle, "status");
          AddSpell(comboBox, settings.CoreBar, "tongues");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreCle, "aid");
          AddSpell(comboBox, settings.CoreBarDru, "animal messenger");
          AddSpell(comboBox, settings.CoreBarDru, "animal trance");
          AddSpell(comboBox, settings.AdvpgBar, "cacophonous call");
          AddSpell(comboBox, settings.CoreBarCle, "calm emotions");
          AddSpell(comboBox, settings.AdvpgInq, "castigate");
          AddSpell(comboBox, settings.AdvpgInq, "confess");
          AddSpell(comboBox, settings.CoreBarSorWiz, "daze monster");
          AddSpell(comboBox, settings.CoreBarCle, "enthrall");
          AddSpell(comboBox, settings.CoreBar, "heroism");
          AddSpell(comboBox, settings.CoreSorWiz, "hideous laughter");
          AddSpell(comboBox, settings.CoreDruRan, "hold animal");
          AddSpell(comboBox, settings.CoreBarCle, "hold person");
          AddSpell(comboBox, settings.CoreBar, "rage");
          AddSpell(comboBox, settings.AdvpgPal, "righteous vigor");
          AddSpell(comboBox, settings.CoreBar, "suggestion");
          AddSpell(comboBox, settings.CoreSorWiz, "touch of idiocy");
          AddSpell(comboBox, settings.CoreClePal, "zone of truth");
          break;
        case "evocation":
          AddSpell(comboBox, settings.AdvpgDruSorWizWit, "burning gaze");
          AddSpell(comboBox, settings.AdvpgDruRan, "campfire wall");
          AddSpell(comboBox, settings.CoreCle, "consecrate");
          AddSpell(comboBox, settings.CoreSorWiz, "continual flame");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "darkness");
          AddSpell(comboBox, settings.CoreCle, "desecrate");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "elemental touch");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "fire breath");
          AddSpell(comboBox, settings.AdvpgPal, "fire of entanglement");
          AddSpell(comboBox, settings.CoreDru, "flame blade");
          AddSpell(comboBox, settings.CoreDruSorWiz, "flaming sphere");
          AddSpell(comboBox, settings.CoreDruSorWiz, "gust of wind");
          AddSpell(comboBox, settings.AdvpgPal, "light lance");
          AddSpell(comboBox, settings.CoreSorWiz, "scorching ray");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "shatter");
          AddSpell(comboBox, settings.CoreBarCle, "sound burst");
          AddSpell(comboBox, settings.CoreCle, "spiritual weapon");
          AddSpell(comboBox, settings.AdvpgPal, "wake of light");
          AddSpell(comboBox, settings.CoreRan, "wind wall");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreBarSorWiz, "blur");
          AddSpell(comboBox, settings.AdvpgRan, "chameleon stride");
          AddSpell(comboBox, settings.AdvpgRan, "hide campsite");
          AddSpell(comboBox, settings.CoreBarSorWiz, "hypnotic pattern");
          AddSpell(comboBox, settings.CoreBarSorWiz, "invisibility");
          AddSpell(comboBox, settings.CoreSorWiz, "magic mouth");
          AddSpell(comboBox, settings.CoreBarSorWiz, "minor image");
          AddSpell(comboBox, settings.CoreBarSorWiz, "mirror image");
          AddSpell(comboBox, settings.CoreBarSorWiz, "misdirection");
          AddSpell(comboBox, settings.CoreSorWiz, "phantom trap");
          AddSpell(comboBox, settings.CoreBarCle, "silence");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreBarSorWiz, "blindness/deafness");
          AddSpell(comboBox, settings.CoreSorWiz, "command undead");
          AddSpell(comboBox, settings.CoreCle, "death knell");
          AddSpell(comboBox, settings.CoreSorWiz, "false life");
          AddSpell(comboBox, settings.AdvpgWit, "fester");
          AddSpell(comboBox, settings.CoreCle, "gentle repose");
          AddSpell(comboBox, settings.CoreSorWiz, "ghoul touch");
          AddSpell(comboBox, settings.CoreCle, "inflict moderate wounds");
          AddSpell(comboBox, settings.AdvpgOra, "oracle's burden");
          AddSpell(comboBox, settings.AdvpgDruWit, "pox pustules");
          AddSpell(comboBox, settings.CoreBarSorWiz, "scare");
          AddSpell(comboBox, settings.CoreSorWiz, "spectral hand");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.AdvpgDruRanSorWiz, "accelerate poison");
          AddSpell(comboBox, settings.AdvpgAlc, "alchemical allocation");
          AddSpell(comboBox, settings.CoreCle, "align weapon");
          AddSpell(comboBox, settings.AdvpgRan, "allfood");
          AddSpell(comboBox, settings.CoreBarSorWiz, "alter self");
          AddSpell(comboBox, settings.AdvpgDruRan, "aspect of the bear");
          AddSpell(comboBox, settings.CoreDruRan, "barkskin");
          AddSpell(comboBox, settings.CoreCleDruRanSorWiz, "bear's endurance");
          AddSpell(comboBox, settings.AdvpgInqRan, "bloodhound");
          AddSpell(comboBox, settings.CoreCleDruPalSorWiz, "bull's strength");
          AddSpell(comboBox, settings.CoreBarDruRanSorWiz, "cat's grace");
          AddSpell(comboBox, settings.CoreDru, "chill metal");
          AddSpell(comboBox, settings.CoreSorWiz, "darkvision");
          AddSpell(comboBox, settings.CoreBarClePalSorWiz, "eagle's splendor");
          AddSpell(comboBox, settings.AdvpgBar, "enter image");
          AddSpell(comboBox, settings.AdvpgDruWit, "feast of ashes");
          AddSpell(comboBox, settings.AdvpgInq, "flames of the faithful");
          AddSpell(comboBox, settings.CoreBarSorWiz, "fox's cunning");
          AddSpell(comboBox, settings.AdvpgBarCleInq, "ghostbane dirge");
          AddSpell(comboBox, settings.AdvpgDruSorWizSumWit, "glide");
          AddSpell(comboBox, settings.CoreDru, "heat metal");
          AddSpell(comboBox, settings.AdvpgBarWit, "hidden speech");
          AddSpell(comboBox, settings.AdvpgBarInq, "honeyed tongue");
          AddSpell(comboBox, settings.CoreSorWiz, "knock");
          AddSpell(comboBox, settings.AdvpgSum, "lesser evolution surge");
          AddSpell(comboBox, settings.CoreSorWiz, "levitate");
          AddSpell(comboBox, settings.AdvpgDruRan, "lockjaw");
          AddSpell(comboBox, settings.CoreCleSorWiz, "make whole");
          AddSpell(comboBox, settings.AdvpgDru, "natural rhythm");
          AddSpell(comboBox, settings.CoreCleDruPalRanSorWiz, "owl's wisdom");
          AddSpell(comboBox, settings.AdvpgAlcInqRanWit, "perceive cues");
          AddSpell(comboBox, settings.CoreBarSorWiz, "pyrotechnics");
          AddSpell(comboBox, settings.CoreDru, "reduce animal");
          AddSpell(comboBox, settings.CoreSorWiz, "rope trick");
          AddSpell(comboBox, settings.AdvpgPal, "saddle surge");
          AddSpell(comboBox, settings.AdvpgDru, "scent trail");
          AddSpell(comboBox, settings.CoreRan, "snare");
          AddSpell(comboBox, settings.CoreDru, "soften earth and stone");
          AddSpell(comboBox, settings.CoreDruSorWiz, "spider climb");
          AddSpell(comboBox, settings.CoreRan, "spike growth");
          AddSpell(comboBox, settings.AdvpgAlc, "transmute potion to poison");
          AddSpell(comboBox, settings.CoreDru, "tree shape");
          AddSpell(comboBox, settings.AdvpgBarRan, "versatile weapon");
          AddSpell(comboBox, settings.CoreDru, "warp wood");
          AddSpell(comboBox, settings.AdvpgCleInqPal, "weapon of awe");
          AddSpell(comboBox, settings.CoreBarSorWiz, "whispering wind");
          AddSpell(comboBox, settings.CoreDru, "wood shape");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 3 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level3Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.AdvpgAlc, "absorbing touch");
          AddSpell(comboBox, settings.AdvpgInq, "banish seeming");
          AddSpell(comboBox, settings.AdvpgInq, "cast out");
          AddSpell(comboBox, settings.AdvpgDruRanSorWiz, "cloak of winds");
          AddSpell(comboBox, settings.AdvpgAnt, "defile armor");
          AddSpell(comboBox, settings.CoreBarClePalSorWiz, "dispel magic");
          AddSpell(comboBox, settings.CoreSorWiz, "explosive runes");
          AddSpell(comboBox, settings.CoreCle, "glyph of warding");
          AddSpell(comboBox, settings.AdvpgRan, "life bubble");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "magic circle against chaos");
          AddSpell(comboBox, settings.CoreClePalSorWiz, "magic circle against evil");
          AddSpell(comboBox, settings.CoreCleSorWiz, "magic circle against good");
          AddSpell(comboBox, settings.CoreCleSorWiz, "magic circle against law");
          AddSpell(comboBox, settings.AdvpgPal, "marks of forbiddance");
          AddSpell(comboBox, settings.CoreSorWiz, "nondetection");
          AddSpell(comboBox, settings.CoreCle, "obscure object");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "protection from energy");
          AddSpell(comboBox, settings.CoreBarClePal, "remove curse");
          AddSpell(comboBox, settings.CoreRan, "repel vermin");
          AddSpell(comboBox, settings.AdvpgPal, "sanctify armor");
          AddSpell(comboBox, settings.AdvpgInq, "ward the faithful");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.AdvpgDruSorWizSum, "aqueous orb");
          AddSpell(comboBox, settings.CoreCle, "create food and water");
          AddSpell(comboBox, settings.CoreDruPalRan, "cure moderate wounds");
          AddSpell(comboBox, settings.CoreBarCle, "cure serious wounds");
          AddSpell(comboBox, settings.CorePal, "heal mount");
          AddSpell(comboBox, settings.AdvpgBar, "jester's jaunt");
          AddSpell(comboBox, settings.CoreDruRan, "neutralize poison");
          AddSpell(comboBox, settings.CoreBarSorWiz, "phantom steed");
          AddSpell(comboBox, settings.AdvpgBar, "purging finale");
          AddSpell(comboBox, settings.AdvpgSum, "rejuvenate eidolon");
          AddSpell(comboBox, settings.CoreClePal, "remove blindness / deafness");
          AddSpell(comboBox, settings.CoreCleDruRan, "remove disease");
          AddSpell(comboBox, settings.AdvpgBar, "reviving finale");
          AddSpell(comboBox, settings.AdvpgCle, "sacred bond");
          AddSpell(comboBox, settings.CoreBarSorWiz, "sepia snake sigil");
          AddSpell(comboBox, settings.CoreDruSorWiz, "sleet storm");
          AddSpell(comboBox, settings.AdvpgSorWizSum, "spiked pit");
          AddSpell(comboBox, settings.CoreSorWiz, "stinking cloud");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster III");
          AddSpell(comboBox, settings.CoreDruRan, "summon nature's ally III");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreSorWiz, "arcane sight");
          AddSpell(comboBox, settings.AdvpgCleInqSorWiz, "blood biography");
          AddSpell(comboBox, settings.CoreBarSorWiz, "clairaudience / clairvoyance");
          AddSpell(comboBox, settings.AdvpgBarInq, "coordinated effort");
          AddSpell(comboBox, settings.AdvpgDru, "create treasure map");
          AddSpell(comboBox, settings.CorePal, "discern lies");
          AddSpell(comboBox, settings.AdvpgBarCle, "elemental speech");
          AddSpell(comboBox, settings.AdvpgCleWit, "guiding star");
          AddSpell(comboBox, settings.AdvpgInq, "hunter's eye");
          AddSpell(comboBox, settings.CoreCle, "locate object");
          AddSpell(comboBox, settings.CoreBar, "scrying");
          AddSpell(comboBox, settings.CoreBar, "see invisibility");
          AddSpell(comboBox, settings.AdvpgAlcBarInqSorWizSumWit, "seek thoughts");
          AddSpell(comboBox, settings.AdvpgWit, "share senses");
          AddSpell(comboBox, settings.CoreBar, "speak with animals");
          AddSpell(comboBox, settings.CoreDru, "speak with plants");
          AddSpell(comboBox, settings.CoreSorWiz, "tongues");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreBar, "charm monster");
          AddSpell(comboBox, settings.CoreBar, "confusion");
          AddSpell(comboBox, settings.CoreBar, "crushing despair");
          AddSpell(comboBox, settings.CoreBarSorWiz, "deep slumber");
          AddSpell(comboBox, settings.CoreDru, "dominate animal");
          AddSpell(comboBox, settings.CoreBar, "good hope");
          AddSpell(comboBox, settings.CoreSorWiz, "heroism");
          AddSpell(comboBox, settings.CoreSorWiz, "hold person");
          AddSpell(comboBox, settings.AdvpgRan, "instant enemy");
          AddSpell(comboBox, settings.CoreBar, "lesser geas");
          AddSpell(comboBox, settings.CoreClePal, "prayer");
          AddSpell(comboBox, settings.CoreSorWiz, "rage");
          AddSpell(comboBox, settings.AdvpgInq, "righteous vigor");
          AddSpell(comboBox, settings.CoreSorWiz, "suggestion");
          break;
        case "evocation":
          AddSpell(comboBox, settings.AdvpgBar, "arcane concordance");
          AddSpell(comboBox, settings.AdvpgOra, "borrow fortune");
          AddSpell(comboBox, settings.CoreDru, "call lightning");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "campfire wall");
          AddSpell(comboBox, settings.CoreCle, "continual flame");
          AddSpell(comboBox, settings.CoreBarCleDruPalSorWiz, "daylight");
          AddSpell(comboBox, settings.CoreCle, "deeper darkness");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "draconic reservoir");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "elemental aura");
          AddSpell(comboBox, settings.AdvpgPal, "fire of judgement");
          AddSpell(comboBox, settings.CoreSorWiz, "fireball");
          AddSpell(comboBox, settings.CoreCle, "helping hand");
          AddSpell(comboBox, settings.AdvpgPal, "holy whisper");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "hydraulic torrent");
          AddSpell(comboBox, settings.CoreCle, "invisibility purge");
          AddSpell(comboBox, settings.CoreSorWiz, "lightning bolt");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "pain strike");
          AddSpell(comboBox, settings.AdvpgWit, "screech");
          AddSpell(comboBox, settings.CoreCle, "searing light");
          AddSpell(comboBox, settings.AdvpgBar, "thundering drums");
          AddSpell(comboBox, settings.CoreBarSorWiz, "tiny hut");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "twilight knife");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "wind wall");
          AddSpell(comboBox, settings.AdvpgClePal, "wrathful mantle");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreBarSorWiz, "displacement");
          AddSpell(comboBox, settings.AdvpgDru, "hide campsite");
          AddSpell(comboBox, settings.CoreBarSorWiz, "illusory script");
          AddSpell(comboBox, settings.CoreBarSorWiz, "invisibility sphere");
          AddSpell(comboBox, settings.CoreBarSorWiz, "major image");
          AddSpell(comboBox, settings.AdvpgBar, "mass invigorate");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreCle, "animate dead");
          AddSpell(comboBox, settings.CoreCle, "bestow curse");
          AddSpell(comboBox, settings.CoreCle, "blindness / deafness");
          AddSpell(comboBox, settings.AdvpgRan, "bloody claws");
          AddSpell(comboBox, settings.CoreCleDru, "contagion");
          AddSpell(comboBox, settings.AdvpgPal, "divine transfer");
          AddSpell(comboBox, settings.CoreBar, "fear");
          AddSpell(comboBox, settings.AdvpgInq, "fester");
          AddSpell(comboBox, settings.CoreSorWiz, "gentle repose");
          AddSpell(comboBox, settings.CoreSorWiz, "halt undead");
          AddSpell(comboBox, settings.CoreCle, "inflict serious wounds");
          AddSpell(comboBox, settings.AdvpgCle, "nap stack");
          AddSpell(comboBox, settings.CoreDru, "poison");
          AddSpell(comboBox, settings.CoreSorWiz, "ray of exhaustion");
          AddSpell(comboBox, settings.AdvpgInq, "retribution");
          AddSpell(comboBox, settings.CoreCle, "speak with dead");
          AddSpell(comboBox, settings.CoreSorWiz, "vampiric touch");
          AddSpell(comboBox, settings.AdvpgRan, "venomous bolt");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.AdvpgAlc, "amplify elixir");
          AddSpell(comboBox, settings.AdvpgRan, "aspect of the stag");
          AddSpell(comboBox, settings.CoreSorWiz, "beast shape I");
          AddSpell(comboBox, settings.CoreBarSorWiz, "blink");
          AddSpell(comboBox, settings.AdvpgAlc, "bloodhound");
          AddSpell(comboBox, settings.CoreRan, "command plants");
          AddSpell(comboBox, settings.AdvpgDruWit, "cup of dust");
          AddSpell(comboBox, settings.CoreRan, "darkvision");
          AddSpell(comboBox, settings.AdvpgSorWizSum, "devolution");
          AddSpell(comboBox, settings.CoreDruRan, "diminish plants");
          AddSpell(comboBox, settings.AdvpgCleSorWiz, "enter image");
          AddSpell(comboBox, settings.AdvpgSum, "evolution surge");
          AddSpell(comboBox, settings.CoreSorWiz, "flame arrow");
          AddSpell(comboBox, settings.CoreSorWiz, "fly");
          AddSpell(comboBox, settings.CoreBarSorWiz, "gaseous form");
          AddSpell(comboBox, settings.CoreBar, "glibness");
          AddSpell(comboBox, settings.CoreDruRan, "greater magic fang");
          AddSpell(comboBox, settings.CorePalSorWiz, "greater magic weapon");
          AddSpell(comboBox, settings.CoreBarSorWiz, "haste");
          AddSpell(comboBox, settings.AdvpgInq, "hidden speech");
          AddSpell(comboBox, settings.CoreSorWiz, "keen edge");
          AddSpell(comboBox, settings.AdvpgDru, "lily pad stride");
          AddSpell(comboBox, settings.CoreCle, "magic vestment");
          AddSpell(comboBox, settings.AdvpgBarDruRan, "mass feather step");
          AddSpell(comboBox, settings.AdvpgPal, "mass ghostbane dirge");
          AddSpell(comboBox, settings.CoreCleDru, "meld into stone");
          AddSpell(comboBox, settings.AdvpgDruWit, "nature's exile");
          AddSpell(comboBox, settings.CoreDruRan, "plant growth");
          AddSpell(comboBox, settings.CoreDru, "quench");
          AddSpell(comboBox, settings.CoreRan, "reduce animal");
          AddSpell(comboBox, settings.CoreBar, "sculpt sound");
          AddSpell(comboBox, settings.CoreBarSorWiz, "secret page");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "shifting sand");
          AddSpell(comboBox, settings.CoreSorWiz, "shrink item");
          AddSpell(comboBox, settings.CoreBarSorWiz, "slow");
          AddSpell(comboBox, settings.CoreDru, "snare");
          AddSpell(comboBox, settings.CoreDru, "spike growth");
          AddSpell(comboBox, settings.CoreCleDru, "stone shape");
          AddSpell(comboBox, settings.AdvpgRan, "strong jaw");
          AddSpell(comboBox, settings.AdvpgAlc, "thorn body");
          AddSpell(comboBox, settings.AdvpgRan, "tireless pursuers");
          AddSpell(comboBox, settings.CoreRan, "tree shape");
          AddSpell(comboBox, settings.AdvpgSorWiz, "versatile weapon");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "water breathing");
          AddSpell(comboBox, settings.CoreCleRan, "water walk");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 4 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level4Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreDru, "antiplant shell");
          AddSpell(comboBox, settings.CoreBarPal, "break enchantment");
          AddSpell(comboBox, settings.AdvpgInq, "defile armor");
          AddSpell(comboBox, settings.CoreCleSorWiz, "dimensional anchor");
          AddSpell(comboBox, settings.CoreCle, "dismissal");
          AddSpell(comboBox, settings.CorePal, "dispel chaos");
          AddSpell(comboBox, settings.CorePal, "dispel evil");
          AddSpell(comboBox, settings.CoreDru, "dispel magic");
          AddSpell(comboBox, settings.CoreSorWiz, "fire trap");
          AddSpell(comboBox, settings.CoreBarCleDruRan, "freedom of movement");
          AddSpell(comboBox, settings.CoreSorWiz, "lesser globe of invulnerability");
          AddSpell(comboBox, settings.AdvpgDru, "life bubble");
          AddSpell(comboBox, settings.CoreRan, "nondetection");
          AddSpell(comboBox, settings.AdvpgPal, "oath of peace");
          AddSpell(comboBox, settings.CoreSorWiz, "remove curse");
          AddSpell(comboBox, settings.CoreBarCleDruRan, "repel vermin");
          AddSpell(comboBox, settings.AdvpgPal, "sacrificial oath");
          AddSpell(comboBox, settings.AdvpgInq, "sanctify armor");
          AddSpell(comboBox, settings.CoreCle, "spell immunity");
          AddSpell(comboBox, settings.AdvpgWit, "spite");
          AddSpell(comboBox, settings.CoreSorWiz, "stoneskin");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "true form");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.AdvpgSorWizSum, "acid pit");
          AddSpell(comboBox, settings.CoreSorWiz, "black tentacles");
          AddSpell(comboBox, settings.AdvpgPal, "blaze of glory");
          AddSpell(comboBox, settings.AdvpgRan, "bow spirit");
          AddSpell(comboBox, settings.CoreBarCle, "cure critical wounds");
          AddSpell(comboBox, settings.CoreDruPalRan, "cure serious wounds");
          AddSpell(comboBox, settings.CoreBarSorWiz, "dimension door");
          AddSpell(comboBox, settings.AdvpgDru, "geyser");
          AddSpell(comboBox, settings.AdvpgDruRan, "grove of respite");
          AddSpell(comboBox, settings.AdvpgPal, "king's castle");
          AddSpell(comboBox, settings.CoreCle, "lesser planar ally");
          AddSpell(comboBox, settings.CoreSorWiz, "minor creation");
          AddSpell(comboBox, settings.CoreBarClePal, "neutralize poison");
          AddSpell(comboBox, settings.AdvpgSum, "purified calling");
          AddSpell(comboBox, settings.CoreClePal, "restoration");
          AddSpell(comboBox, settings.CoreBarSorWiz, "secure shelter");
          AddSpell(comboBox, settings.CoreSorWiz, "solid fog");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster IV");
          AddSpell(comboBox, settings.CoreDruRan, "summon nature's ally IV");
          AddSpell(comboBox, settings.CoreRan, "tree stride");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreSorWiz, "arcane eye");
          AddSpell(comboBox, settings.CoreRan, "commune with nature");
          AddSpell(comboBox, settings.CoreBarSorWiz, "detect scrying");
          AddSpell(comboBox, settings.CoreCle, "discern lies");
          AddSpell(comboBox, settings.CoreCle, "divination");
          AddSpell(comboBox, settings.CoreBar, "legend lore");
          AddSpell(comboBox, settings.CoreBarSorWiz, "locate creature");
          AddSpell(comboBox, settings.CoreDruSorWiz, "scrying");
          AddSpell(comboBox, settings.AdvpgSorWiz, "share senses");
          AddSpell(comboBox, settings.CoreBar, "speak with plants");
          AddSpell(comboBox, settings.CoreCle, "tongues");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreSorWiz, "charm monster");
          AddSpell(comboBox, settings.CoreSorWiz, "confusion");
          AddSpell(comboBox, settings.AdvpgInq, "coward's lament");
          AddSpell(comboBox, settings.CoreSorWiz, "crushing despair");
          AddSpell(comboBox, settings.AdvpgBarInq, "denounce");
          AddSpell(comboBox, settings.CoreBar, "dominate person");
          AddSpell(comboBox, settings.AdvpgInqPal, "forced repentance");
          AddSpell(comboBox, settings.AdvpgBar, "heroic finale");
          AddSpell(comboBox, settings.CoreBar, "hold monster");
          AddSpell(comboBox, settings.CoreSorWiz, "lesser geas");
          AddSpell(comboBox, settings.CoreBar, "modify memory");
          AddSpell(comboBox, settings.AdvpgDruSorWizWit, "moonstruck");
          AddSpell(comboBox, settings.AdvpgInq, "shared wrath");
          AddSpell(comboBox, settings.AdvpgInqWit, "sleepwalk");
          AddSpell(comboBox, settings.AdvpgPal, "stay the hand");
          break;
        case "evocation":
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "ball lightning");
          AddSpell(comboBox, settings.CoreCle, "chaos hammer");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "detonate");
          AddSpell(comboBox, settings.AdvpgBar, "discordant blast");
          AddSpell(comboBox, settings.CoreCle, "divine power");
          AddSpell(comboBox, settings.AdvpgAlcSorWiz, "dragon's breath");
          AddSpell(comboBox, settings.AdvpgPal, "fire of vengeance");
          AddSpell(comboBox, settings.CoreSorWiz, "fire shield");
          AddSpell(comboBox, settings.CoreDru, "flame strike");
          AddSpell(comboBox, settings.CoreCle, "holy smite");
          AddSpell(comboBox, settings.CorePal, "holy sword");
          AddSpell(comboBox, settings.CoreDruSorWiz, "ice storm");
          AddSpell(comboBox, settings.CoreCle, "imbue with spell ability");
          AddSpell(comboBox, settings.CoreCle, "order's wrath");
          AddSpell(comboBox, settings.CoreSorWiz, "ray of frost");
          AddSpell(comboBox, settings.AdvpgInq, "rebuke");
          AddSpell(comboBox, settings.CoreSorWiz, "resilient sphere");
          AddSpell(comboBox, settings.AdvpgAntPal, "resounding blow");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "river of wind");
          AddSpell(comboBox, settings.CoreCle, "sending");
          AddSpell(comboBox, settings.CoreBarSorWiz, "shout");
          AddSpell(comboBox, settings.AdvpgCle, "spiritual ally");
          AddSpell(comboBox, settings.CoreCle, "unholy blight");
          AddSpell(comboBox, settings.CoreSorWiz, "wall of fire");
          AddSpell(comboBox, settings.CoreSorWiz, "wall of ice");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreBarSorWiz, "greater invisibility");
          AddSpell(comboBox, settings.CoreBarSorWiz, "hallucinatory terrain");
          AddSpell(comboBox, settings.CoreSorWiz, "illusory wall");
          AddSpell(comboBox, settings.CoreSorWiz, "phantasmal killer");
          AddSpell(comboBox, settings.CoreBarSorWiz, "rainbow pattern");
          AddSpell(comboBox, settings.CoreBarSorWiz, "shadow conjuration");
          AddSpell(comboBox, settings.AdvpgBarSorWizWit, "wandering star motes");
          AddSpell(comboBox, settings.CoreBar, "zone of silence");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreSorWiz, "animate dead");
          AddSpell(comboBox, settings.CoreSorWiz, "bestow curse");
          AddSpell(comboBox, settings.CoreDru, "blight");
          AddSpell(comboBox, settings.AdvpgDru, "bloody claws");
          AddSpell(comboBox, settings.CoreSorWiz, "contagion");
          AddSpell(comboBox, settings.CoreClePal, "death ward");
          AddSpell(comboBox, settings.CoreSorWiz, "enervation");
          AddSpell(comboBox, settings.CoreSorWiz, "fear");
          AddSpell(comboBox, settings.CoreCle, "inflict critical wounds");
          AddSpell(comboBox, settings.CorePal, "mark of justice");
          AddSpell(comboBox, settings.CoreCle, "poison");
          AddSpell(comboBox, settings.AdvpgCle, "rest eternal");
          AddSpell(comboBox, settings.AdvpgSorWiz, "shadow projection");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.CoreCleDru, "air walk");
          AddSpell(comboBox, settings.CoreRan, "animal growth");
          AddSpell(comboBox, settings.AdvpgDru, "aspect of the stag");
          AddSpell(comboBox, settings.AdvpgRan, "aspect of the wolf");
          AddSpell(comboBox, settings.CoreSorWiz, "beast shape II");
          AddSpell(comboBox, settings.AdvpgCle, "blessing of fervor");
          AddSpell(comboBox, settings.AdvpgRan, "blessing of the salamander");
          AddSpell(comboBox, settings.AdvpgSorWiz, "calcific touch");
          AddSpell(comboBox, settings.CoreDru, "command plants");
          AddSpell(comboBox, settings.CoreCleDru, "control water");
          AddSpell(comboBox, settings.CoreSorWiz, "elemental body I");
          AddSpell(comboBox, settings.AdvpgSorWiz, "firefall");
          AddSpell(comboBox, settings.AdvpgAlc, "fluid form");
          AddSpell(comboBox, settings.CoreCleDru, "giant vermin");
          AddSpell(comboBox, settings.AdvpgInq, "greater brand");
          AddSpell(comboBox, settings.AdvpgSum, "greater evolution surge");
          AddSpell(comboBox, settings.CoreCle, "greater magic weapon");
          AddSpell(comboBox, settings.CoreSorWiz, "mass enlarge person");
          AddSpell(comboBox, settings.AdvpgBar, "mass ghostbane dirge");
          AddSpell(comboBox, settings.CoreSorWiz, "mass reduce person");
          AddSpell(comboBox, settings.CoreWiz, "mnemonic enhancer");
          AddSpell(comboBox, settings.AdvpgCle, "planar adaptation");
          AddSpell(comboBox, settings.CoreDru, "reincarnate");
          AddSpell(comboBox, settings.CoreDru, "rusting grasp");
          AddSpell(comboBox, settings.CoreDru, "spike stones");
          AddSpell(comboBox, settings.CoreSorWiz, "stone shape");
          AddSpell(comboBox, settings.AdvpgDru, "strong jaw");
          AddSpell(comboBox, settings.AdvpgDru, "thorn body");
          AddSpell(comboBox, settings.AdvpgWit, "threefold aspect");
          AddSpell(comboBox, settings.AdvpgInq, "tireless pursuers");
          AddSpell(comboBox, settings.AdvpgSum, "transmogrify");
          AddSpell(comboBox, settings.AdvpgBar, "treasure stitching");
          AddSpell(comboBox, settings.AdvpgAlc, "universal formula");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 5 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level5Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        #region universal 5
        case "universal":
          AddSpell(comboBox, settings.CoreSorWiz, "permanency");
          break;
        #endregion
        #region abjuration 5
        case "abjuration":
          AddSpell(comboBox, settings.CoreCleDru, "atonement");
          AddSpell(comboBox, settings.AdvpgWit, "banish seeming");
          AddSpell(comboBox, settings.CoreCleSorWiz, "break enchantment");
          AddSpell(comboBox, settings.CoreSorWiz, "dismissal");
          AddSpell(comboBox, settings.CoreCle, "dispel chaos");
          AddSpell(comboBox, settings.CoreCle, "dispel evil");
          AddSpell(comboBox, settings.CoreCle, "dispel good");
          AddSpell(comboBox, settings.CoreCle, "dispel law");
          AddSpell(comboBox, settings.CoreBar, "greater dispel magic");
          AddSpell(comboBox, settings.AdvpgCleSorWiz, "life bubble");
          AddSpell(comboBox, settings.CoreSorWiz, "mage's private sanctum");
          AddSpell(comboBox, settings.CoreCle, "spell resistance");
          AddSpell(comboBox, settings.CoreDru, "stoneskin");
          break;
        #endregion
        #region conjuration 5
        case "conjuration":
          AddSpell(comboBox, settings.AdvpgBar, "bard's escape");
          AddSpell(comboBox, settings.CoreCle, "breath of life");
          AddSpell(comboBox, settings.CoreSorWiz, "cloudkill");
          AddSpell(comboBox, settings.CoreDru, "cure critical wounds");
          AddSpell(comboBox, settings.AdvpgSorWiz, "geyser");
          AddSpell(comboBox, settings.AdvpgSum, "greater rejuvenate eidolon");
          AddSpell(comboBox, settings.AdvpgSorWizSum, "hungry pit");
          AddSpell(comboBox, settings.CoreCleDru, "insect plague");
          AddSpell(comboBox, settings.CoreSorWiz, "lesser planar binding");
          AddSpell(comboBox, settings.CoreSorWiz, "mage's faithful hound");
          AddSpell(comboBox, settings.CoreSorWiz, "major creation");
          AddSpell(comboBox, settings.CoreBarCle, "mass cure light wounds");
          AddSpell(comboBox, settings.AdvpgCle, "pillar of life");
          AddSpell(comboBox, settings.CoreCle, "plane shift");
          AddSpell(comboBox, settings.CoreCle, "raise dead");
          AddSpell(comboBox, settings.AdvpgAlc, "resurgent transformation");
          AddSpell(comboBox, settings.CoreSorWiz, "secret chest");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster V");
          AddSpell(comboBox, settings.CoreDru, "summon nature's ally V");
          AddSpell(comboBox, settings.CoreSorWiz, "teleport");
          AddSpell(comboBox, settings.CoreDru, "tree stride");
          AddSpell(comboBox, settings.CoreCleSorWiz, "wall of stone");
          AddSpell(comboBox, settings.CoreDru, "wall of thorns");
          break;
        #endregion
        #region divination 5
        case "divination":
          AddSpell(comboBox, settings.CoreCle, "commune");
          AddSpell(comboBox, settings.CoreDru, "commune with nature");
          AddSpell(comboBox, settings.CoreSorWiz, "contact other plane");
          AddSpell(comboBox, settings.CoreSorWiz, "prying eyes");
          AddSpell(comboBox, settings.CoreCle, "scrying");
          AddSpell(comboBox, settings.CoreSorWiz, "telepathic bond");
          AddSpell(comboBox, settings.CoreCle, "true seeing");
          break;
        #endregion
        #region enchantment 5
        case "enchantment":
          AddSpell(comboBox, settings.AdvpgBar, "cloak of dreams");
          AddSpell(comboBox, settings.CoreSorWiz, "dominate person");
          AddSpell(comboBox, settings.CoreSorWiz, "feeblemind");
          AddSpell(comboBox, settings.AdvpgBar, "foe to friend");
          AddSpell(comboBox, settings.AdvpgBar, "frozen note");
          AddSpell(comboBox, settings.CoreCle, "greater command");
          AddSpell(comboBox, settings.CoreBar, "greater heroism");
          AddSpell(comboBox, settings.CoreSorWiz, "hold monster");
          AddSpell(comboBox, settings.AdvpgBar, "mass cacophonous call");
          AddSpell(comboBox, settings.AdvpgInq, "mass castigate");
          AddSpell(comboBox, settings.CoreBar, "mass suggestion");
          AddSpell(comboBox, settings.CoreBarSorWiz, "mind fog");
          AddSpell(comboBox, settings.CoreBar, "song of discord");
          AddSpell(comboBox, settings.AdvpgBar, "stunning finale");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of sleep");
          break;
        #endregion
        #region evocation 5
        case "evocation":
          AddSpell(comboBox, settings.CoreDru, "call lightning storm");
          AddSpell(comboBox, settings.AdvpgCle, "cleanse");
          AddSpell(comboBox, settings.CoreSorWiz, "cone of cold");
          AddSpell(comboBox, settings.AdvpgBar, "deafening song bolt");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "fire snake");
          AddSpell(comboBox, settings.CoreCle, "flame strike");
          AddSpell(comboBox, settings.CoreCleDru, "hallow");
          AddSpell(comboBox, settings.CoreSorWiz, "interposing hand");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "mass pain strike");
          AddSpell(comboBox, settings.AdvpgInq, "resounding blow");
          AddSpell(comboBox, settings.CoreSorWiz, "sending");
          AddSpell(comboBox, settings.CoreCleDru, "unhallow");
          AddSpell(comboBox, settings.CoreDru, "wall of fire");
          AddSpell(comboBox, settings.CoreSorWiz, "wall of force");
          break;
        #endregion
        #region illusion 5
        case "illusion":
          AddSpell(comboBox, settings.CoreBarSorWiz, "dream");
          AddSpell(comboBox, settings.CoreBarSorWiz, "false vision");
          AddSpell(comboBox, settings.CoreBarSorWiz, "mirage arcana");
          AddSpell(comboBox, settings.CoreBar, "mislead");
          AddSpell(comboBox, settings.CoreBarSorWiz, "nightmare");
          AddSpell(comboBox, settings.CoreBarSorWiz, "persistent image");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "phantasmal web");
          AddSpell(comboBox, settings.CoreBarSorWiz, "seeming");
          AddSpell(comboBox, settings.CoreBarSorWiz, "shadow evocation");
          AddSpell(comboBox, settings.CoreBar, "shadow walk");
          break;
        #endregion
        #region necromancy 5
        case "necromancy":
          AddSpell(comboBox, settings.CoreSorWiz, "blight");
          AddSpell(comboBox, settings.CoreDru, "death ward");
          AddSpell(comboBox, settings.CoreSorWiz, "magic jar");
          AddSpell(comboBox, settings.CoreCle, "mark of justice");
          AddSpell(comboBox, settings.CoreCle, "mass inflict light wounds");
          AddSpell(comboBox, settings.AdvpgDruWit, "rest eternal");
          AddSpell(comboBox, settings.CoreCle, "slay living");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "suffocation");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of pain");
          AddSpell(comboBox, settings.AdvpgBarInq, "unwilling shield");
          AddSpell(comboBox, settings.CoreSorWiz, "waves of fatigue");
          break;
        #endregion
        #region transmutation 5
        case "transmutation":
          AddSpell(comboBox, settings.CoreDruSorWiz, "animal growth");
          AddSpell(comboBox, settings.AdvpgDru, "aspect of the wolf");
          AddSpell(comboBox, settings.CoreDru, "awaken");
          AddSpell(comboBox, settings.CoreDruSorWiz, "baleful polymorph");
          AddSpell(comboBox, settings.CoreSorWiz, "beast shape III");
          AddSpell(comboBox, settings.AdvpgDru, "blessing of the salamander");
          AddSpell(comboBox, settings.CoreDru, "control winds");
          AddSpell(comboBox, settings.AdvpgAlc, "delayed consumption");
          AddSpell(comboBox, settings.CoreCle, "disrupting weapon");
          AddSpell(comboBox, settings.CoreSorWiz, "elemental body II");
          AddSpell(comboBox, settings.AdvpgAlc, "elude time");
          AddSpell(comboBox, settings.CoreSorWiz, "fabricate");
          AddSpell(comboBox, settings.AdvpgCleInq, "mass ghostbane dirge");
          AddSpell(comboBox, settings.CoreSorWiz, "overland flight");
          AddSpell(comboBox, settings.CoreSorWiz, "passwall");
          AddSpell(comboBox, settings.AdvpgAlcSorWizSum, "planar adaptation");
          AddSpell(comboBox, settings.CoreSorWiz, "plant shape I");
          AddSpell(comboBox, settings.CoreSorWiz, "polymorph");
          AddSpell(comboBox, settings.CoreCle, "righteous might");
          AddSpell(comboBox, settings.AdvpgCleDru, "snake staff");
          AddSpell(comboBox, settings.CoreSorWiz, "telekinesis");
          AddSpell(comboBox, settings.AdvpgDru, "threefold aspect");
          AddSpell(comboBox, settings.CoreDruSorWiz, "transmute mud to rock");
          AddSpell(comboBox, settings.CoreDruSorWiz, "transmute rock to mud");
          AddSpell(comboBox, settings.AdvpgCleSorWiz, "treasure stitching");
          break;
        #endregion
        #region default 5
        default: // Unrecognised school
          return;
        #endregion
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 6 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level6Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreCleDru, "antilife shell");
          AddSpell(comboBox, settings.CoreSorWiz, "antimagic field");
          AddSpell(comboBox, settings.CoreCle, "banishment");
          AddSpell(comboBox, settings.AdvpgBar, "fool's forbiddance");
          AddSpell(comboBox, settings.CoreCle, "forbiddance");
          AddSpell(comboBox, settings.CoreSorWiz, "globe of invulnerability");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "greater dispel magic");
          AddSpell(comboBox, settings.CoreCle, "greater glyph of warding");
          AddSpell(comboBox, settings.CoreSorWiz, "guards and wards");
          AddSpell(comboBox, settings.CoreSorWiz, "repulsion");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "acid fog");
          AddSpell(comboBox, settings.CoreDru, "fire seeds");
          AddSpell(comboBox, settings.AdvpgBarSorWiz, "getaway");
          AddSpell(comboBox, settings.CoreCle, "heal");
          AddSpell(comboBox, settings.CoreBarCle, "heroes' feast");
          AddSpell(comboBox, settings.CoreDru, "mass cure light wounds");
          AddSpell(comboBox, settings.CoreBarCle, "mass cure moderate wounds");
          AddSpell(comboBox, settings.CoreCle, "planar ally");
          AddSpell(comboBox, settings.CoreSorWiz, "planar binding");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "summon monster VI");
          AddSpell(comboBox, settings.CoreDru, "summon nature's ally VI");
          AddSpell(comboBox, settings.CoreDru, "transport via plants");
          AddSpell(comboBox, settings.CoreSorWiz, "wall of iron");
          AddSpell(comboBox, settings.CoreDru, "wall of stone");
          AddSpell(comboBox, settings.CoreCle, "word of recall");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreBarSorWiz, "analyze dweomer");
          AddSpell(comboBox, settings.CoreBarCleDru, "find the path");
          AddSpell(comboBox, settings.CoreBar, "greater scrying");
          AddSpell(comboBox, settings.CoreSorWiz, "legend lore");
          AddSpell(comboBox, settings.CoreDru, "stone tell");
          AddSpell(comboBox, settings.CoreSorWiz, "true seeing");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.AdvpgSorWizWit, "cloak of dreams");
          AddSpell(comboBox, settings.AdvpgBar, "euphoric tranquility");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "geas / quest");
          AddSpell(comboBox, settings.CoreSorWiz, "greater heroism");
          AddSpell(comboBox, settings.CoreBar, "irresistible dance");
          AddSpell(comboBox, settings.CoreBar, "mass charm monster");
          AddSpell(comboBox, settings.CoreSorWiz, "mass suggestion");
          AddSpell(comboBox, settings.AdvpgBar, "pied piping");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of persuasion");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreCle, "blade barrier");
          AddSpell(comboBox, settings.AdvpgBar, "brilliant inspiration");
          AddSpell(comboBox, settings.CoreSorWiz, "chain lightning");
          AddSpell(comboBox, settings.AdvpgInq, "cleanse");
          AddSpell(comboBox, settings.AdvpgSorWiz, "contagious flame");
          AddSpell(comboBox, settings.CoreSorWiz, "contingency");
          AddSpell(comboBox, settings.AdvpgBar, "deadly finale");
          AddSpell(comboBox, settings.CoreSorWiz, "forceful hand");
          AddSpell(comboBox, settings.CoreSorWiz, "freezing sphere");
          AddSpell(comboBox, settings.CoreBar, "greater shout");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "sirocco");
          AddSpell(comboBox, settings.CoreBar, "sympathetic vibration");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreSorWiz, "mislead");
          AddSpell(comboBox, settings.CoreBarSorWiz, "permanent image");
          AddSpell(comboBox, settings.CoreBarSorWiz, "programmed image");
          AddSpell(comboBox, settings.CoreBar, "project image");
          AddSpell(comboBox, settings.CoreSorWiz, "shadow walk");
          AddSpell(comboBox, settings.CoreBarSorWiz, "veil");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreSorWiz, "circle of death");
          AddSpell(comboBox, settings.CoreCleSorWiz, "create undead");
          AddSpell(comboBox, settings.CoreBarSorWiz, "eyebite");
          AddSpell(comboBox, settings.CoreCle, "harm");
          AddSpell(comboBox, settings.AdvpgInqWit, "mass fester");
          AddSpell(comboBox, settings.CoreCle, "mass inflict moderate wounds");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of fear");
          AddSpell(comboBox, settings.CoreCleSorWiz, "undeath to death");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "unwilling shield");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.CoreBarCle, "animate objects");
          AddSpell(comboBox, settings.CoreSorWiz, "beast shape IV");
          AddSpell(comboBox, settings.CoreSorWiz, "control water");
          AddSpell(comboBox, settings.CoreSorWiz, "disintegrate");
          AddSpell(comboBox, settings.CoreSorWiz, "elemental body III");
          AddSpell(comboBox, settings.AdvpgSorWiz, "enemy hammer");
          AddSpell(comboBox, settings.CoreSorWiz, "flesh to stone");
          AddSpell(comboBox, settings.AdvpgSorWiz, "fluid form");
          AddSpell(comboBox, settings.CoreSorWiz, "form of the dragon I");
          AddSpell(comboBox, settings.CoreDru, "ironwood");
          AddSpell(comboBox, settings.CoreDru, "liveoak");
          AddSpell(comboBox, settings.CoreWiz, "mage's lucubration");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "mass bear's endurance");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "mass bull's strength");
          AddSpell(comboBox, settings.CoreBarDruSorWiz, "mass cat's grace");
          AddSpell(comboBox, settings.CoreBarCleSorWiz, "mass eagle's splendor");
          AddSpell(comboBox, settings.CoreBarSorWiz, "mass fox's cunning");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "mass owl's wisdom");
          AddSpell(comboBox, settings.AdvpgCleSum, "mass planar adaptation");
          AddSpell(comboBox, settings.CoreDruSorWiz, "move earth");
          AddSpell(comboBox, settings.CoreSorWiz, "plant shape II");
          AddSpell(comboBox, settings.CoreDru, "repel wood");
          AddSpell(comboBox, settings.CoreDru, "spellstaff");
          AddSpell(comboBox, settings.CoreSorWiz, "stone to flesh");
          AddSpell(comboBox, settings.AdvpgDruWit, "swarm skin");
          AddSpell(comboBox, settings.CoreSorWiz, "transformation");
          AddSpell(comboBox, settings.AdvpgAlc, "twin form");
          AddSpell(comboBox, settings.CoreCle, "wind walk");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 7 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level7Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, settings.CoreSorWiz, "limited wish");
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "banishment");
          AddSpell(comboBox, settings.AdvpgSorWiz, "deflection");
          AddSpell(comboBox, settings.AdvpgSorWiz, "expend");
          AddSpell(comboBox, settings.CoreCle, "repulsion");
          AddSpell(comboBox, settings.CoreSorWiz, "sequester");
          AddSpell(comboBox, settings.CoreSorWiz, "spell turning");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CoreDru, "creeping doom");
          AddSpell(comboBox, settings.CoreCle, "greater restoration");
          AddSpell(comboBox, settings.CoreSorWiz, "greater teleport");
          AddSpell(comboBox, settings.CoreDru, "heal");
          AddSpell(comboBox, settings.CoreSorWiz, "instant summons");
          AddSpell(comboBox, settings.CoreSorWiz, "mage's magnificent mansion");
          AddSpell(comboBox, settings.CoreDru, "mass cure moderate wounds");
          AddSpell(comboBox, settings.CoreCle, "mass cure serious wounds");
          AddSpell(comboBox, settings.CoreSorWiz, "phase door");
          AddSpell(comboBox, settings.CoreSorWiz, "plane shift");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "rampart");
          AddSpell(comboBox, settings.CoreCle, "refuge");
          AddSpell(comboBox, settings.CoreCle, "regenerate");
          AddSpell(comboBox, settings.CoreCle, "resurrection");
          AddSpell(comboBox, settings.CoreCleSorWiz, "summon monster VII");
          AddSpell(comboBox, settings.CoreDru, "summon nature's ally VII");
          AddSpell(comboBox, settings.CoreSorWiz, "teleport object");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreSorWiz, "greater arcane sight");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "greater scrying");
          AddSpell(comboBox, settings.CoreDru, "true seeing");
          AddSpell(comboBox, settings.CoreSorWiz, "vision");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreSorWiz, "insanity");
          AddSpell(comboBox, settings.CoreSorWiz, "mass hold person");
          AddSpell(comboBox, settings.CoreSorWiz, "power word blind");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of stunning");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreCle, "blasphemy");
          AddSpell(comboBox, settings.CoreSorWiz, "delayed blast fireball");
          AddSpell(comboBox, settings.CoreCle, "dictum");
          AddSpell(comboBox, settings.CoreDru, "fire storm");
          AddSpell(comboBox, settings.CoreSorWiz, "forcecage");
          AddSpell(comboBox, settings.CoreSorWiz, "grasping hand");
          AddSpell(comboBox, settings.CoreCle, "holy word");
          AddSpell(comboBox, settings.CoreSorWiz, "mage's sword");
          AddSpell(comboBox, settings.CoreSorWiz, "prismatic spray");
          AddSpell(comboBox, settings.CoreDru, "sunbeam");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "vortex");
          AddSpell(comboBox, settings.CoreCle, "word of chaos");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreSorWiz, "greater shadow conjuration");
          AddSpell(comboBox, settings.CoreSorWiz, "mass invisibility");
          AddSpell(comboBox, settings.AdvpgSorWiz, "phantasmal revenge");
          AddSpell(comboBox, settings.CoreSorWiz, "project image");
          AddSpell(comboBox, settings.CoreSorWiz, "simulacrum");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreSorWiz, "control undead");
          AddSpell(comboBox, settings.CoreCle, "destruction");
          AddSpell(comboBox, settings.CoreSorWiz, "finger of death");
          AddSpell(comboBox, settings.CoreCle, "mass inflict serious wounds");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of weakness");
          AddSpell(comboBox, settings.CoreSorWiz, "waves of exhaustion");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.CoreDru, "animate plants");
          AddSpell(comboBox, settings.CoreDru, "changestaff");
          AddSpell(comboBox, settings.CoreCleDruSorWiz, "control weather");
          AddSpell(comboBox, settings.CoreSorWiz, "elemental body IV");
          AddSpell(comboBox, settings.CoreCleSorWiz, "ethereal jaunt");
          AddSpell(comboBox, settings.AdvpgSorWiz, "firebrand");
          AddSpell(comboBox, settings.CoreSorWiz, "form of the dragon II");
          AddSpell(comboBox, settings.CoreSorWiz, "giant form I");
          AddSpell(comboBox, settings.CoreSorWiz, "greater polymorph");
          AddSpell(comboBox, settings.AdvpgSorWiz, "mass fly");
          AddSpell(comboBox, settings.AdvpgSorWiz, "mass planar adaptation");
          AddSpell(comboBox, settings.CoreSorWiz, "plant shape III");
          AddSpell(comboBox, settings.CoreSorWiz, "reverse gravity");
          AddSpell(comboBox, settings.CoreSorWiz, "statue");
          AddSpell(comboBox, settings.CoreDru, "transmute metal to wood");
          AddSpell(comboBox, settings.CoreDru, "wind walk");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 8 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>    
    private static void Level8Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, false, string.Empty);
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreCle, "antimagic field");
          AddSpell(comboBox, settings.CoreCle, "cloak of chaos");
          AddSpell(comboBox, settings.CoreCleSorWiz, "dimensional lock");
          AddSpell(comboBox, settings.CoreCle, "greater spell immunity");
          AddSpell(comboBox, settings.CoreCle, "holy aura");
          AddSpell(comboBox, settings.CoreSorWiz, "mind blank");
          AddSpell(comboBox, settings.CoreSorWiz, "prismatic wall");
          AddSpell(comboBox, settings.CoreSorWiz, "protection from spells");
          AddSpell(comboBox, settings.CoreDru, "repel metal or stone");
          AddSpell(comboBox, settings.CoreCle, "shield of law");
          AddSpell(comboBox, settings.CoreCle, "unholy aura");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.CoreCle, "greater planar ally");
          AddSpell(comboBox, settings.CoreSorWiz, "greater planar binding");
          AddSpell(comboBox, settings.CoreSorWiz, "incendiary cloud");
          AddSpell(comboBox, settings.CoreCle, "mass cure critical wounds");
          AddSpell(comboBox, settings.CoreDru, "mass cure serious wounds");
          AddSpell(comboBox, settings.CoreSorWiz, "maze");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "seamantle");
          AddSpell(comboBox, settings.CoreCleSorWiz, "summon monster VIII");
          AddSpell(comboBox, settings.CoreDru, "summon nature's ally VIII");
          AddSpell(comboBox, settings.CoreSorWiz, "trap the soul");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "wall of lava");
          AddSpell(comboBox, settings.CoreDru, "word of recall");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreCleSorWiz, "discern location");
          AddSpell(comboBox, settings.CoreSorWiz, "greater prying eyes");
          AddSpell(comboBox, settings.CoreSorWiz, "moment of prescience");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreSorWiz, "antipathy");
          AddSpell(comboBox, settings.CoreSorWiz, "binding");
          AddSpell(comboBox, settings.CoreSorWiz, "demand");
          AddSpell(comboBox, settings.AdvpgCleDruSorWiz, "euphoric tranquility");
          AddSpell(comboBox, settings.CoreSorWiz, "irresistible dance");
          AddSpell(comboBox, settings.CoreSorWiz, "mass charm monster");
          AddSpell(comboBox, settings.CoreSorWiz, "power word stun");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of insanity");
          AddSpell(comboBox, settings.CoreSorWiz, "sympathy");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreSorWiz, "clenched fist");
          AddSpell(comboBox, settings.CoreCleDru, "earthquake");
          AddSpell(comboBox, settings.CoreCle, "fire storm");
          AddSpell(comboBox, settings.CoreSorWiz, "greater shout");
          AddSpell(comboBox, settings.CoreSorWiz, "polar ray");
          AddSpell(comboBox, settings.AdvpgCleDruSorWizWit, "stormbolts");
          AddSpell(comboBox, settings.CoreDruSorWiz, "sunburst");
          AddSpell(comboBox, settings.CoreSorWiz, "telekinetic sphere");
          AddSpell(comboBox, settings.CoreDru, "whirlwind");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreSorWiz, "greater shadow evocation");
          AddSpell(comboBox, settings.CoreSorWiz, "scintillating pattern");
          AddSpell(comboBox, settings.CoreSorWiz, "screen");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreSorWiz, "clone");
          AddSpell(comboBox, settings.CoreCleSorWiz, "create greater undead");
          AddSpell(comboBox, settings.CoreDru, "finger of death");
          AddSpell(comboBox, settings.CoreSorWiz, "horrid wilting");
          AddSpell(comboBox, settings.CoreCle, "mass inflict critical wounds");
          AddSpell(comboBox, settings.CoreCleSorWiz, "symbol of death");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.CoreDru, "animal shapes");
          AddSpell(comboBox, settings.CoreDru, "control plants");
          AddSpell(comboBox, settings.AdvpgOra, "divine vessel");
          AddSpell(comboBox, settings.CoreSorWiz, "form of the dragon III");
          AddSpell(comboBox, settings.CoreSorWiz, "giant form II");
          AddSpell(comboBox, settings.CoreSorWiz, "iron body");
          AddSpell(comboBox, settings.CoreSorWiz, "polymorph any object");
          AddSpell(comboBox, settings.CoreDru, "reverse gravity");
          AddSpell(comboBox, settings.CoreSorWiz, "temporal stasis");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Entry point for populating a spell choice control with Level 9 spells
    /// </summary>
    /// <param name="settings">Content Configuration settings</param>
    /// <param name="school">The school of spells to populate</param>
    /// <param name="comboBox">The choice control to be populated</param>
    private static void Level9Spells(ContentInclusions settings, string school, ComboBox comboBox)
    {
      switch (school)
      {
        case "universal":
          AddSpell(comboBox, settings.CoreSorWiz, "wish");
          break;
        case "abjuration":
          AddSpell(comboBox, settings.CoreSorWiz, "freedom");
          AddSpell(comboBox, settings.CoreSorWiz, "imprisonment");
          AddSpell(comboBox, settings.CoreSorWiz, "mage's disjunction");
          AddSpell(comboBox, settings.CoreSorWiz, "prismatic sphere");
          AddSpell(comboBox, settings.AdvpgSorWiz, "wall of suppression");
          break;
        case "conjuration":
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "clashing rocks");
          AddSpell(comboBox, settings.CoreDru, "elemental swarm");
          AddSpell(comboBox, settings.CoreCleSorWiz, "gate");
          AddSpell(comboBox, settings.CoreDru, "mass cure critical wounds");
          AddSpell(comboBox, settings.CoreCle, "mass heal");
          AddSpell(comboBox, settings.CoreSorWiz, "refuge");
          AddSpell(comboBox, settings.CoreDru, "regenerate");
          AddSpell(comboBox, settings.CoreDru, "shambler");
          AddSpell(comboBox, settings.CoreCleDru, "storm of vengeance");
          AddSpell(comboBox, settings.CoreCleSorWiz, "summon monster IX");
          AddSpell(comboBox, settings.CoreDru, "summon nature's ally IX");
          AddSpell(comboBox, settings.CoreSorWiz, "teleportation circle");
          AddSpell(comboBox, settings.CoreCle, "true resurrection");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "tsunami");
          break;
        case "divination":
          AddSpell(comboBox, settings.CoreDruSorWiz, "foresight");
          break;
        case "enchantment":
          AddSpell(comboBox, settings.CoreDru, "antipathy");
          AddSpell(comboBox, settings.CoreSorWiz, "dominate monster");
          AddSpell(comboBox, settings.CoreSorWiz, "mass hold monster");
          AddSpell(comboBox, settings.CoreSorWiz, "power word kill");
          AddSpell(comboBox, settings.CoreDru, "sympathy");
          break;
        case "evocation":
          AddSpell(comboBox, settings.CoreSorWiz, "crushing hand");
          AddSpell(comboBox, settings.CoreCle, "implosion");
          AddSpell(comboBox, settings.CoreSorWiz, "meteor swarm");
          AddSpell(comboBox, settings.CoreCle, "miracle");
          AddSpell(comboBox, settings.AdvpgCleDruSorWiz, "winds of vengeance");
          break;
        case "illusion":
          AddSpell(comboBox, settings.CoreSorWiz, "shades");
          AddSpell(comboBox, settings.CoreSorWiz, "weird");
          break;
        case "necromancy":
          AddSpell(comboBox, settings.CoreCleSorWiz, "astral projection");
          AddSpell(comboBox, settings.CoreCleSorWiz, "energy drain");
          AddSpell(comboBox, settings.AdvpgSorWizWit, "mass suffocation");
          AddSpell(comboBox, settings.CoreCleSorWiz, "soul bind");
          AddSpell(comboBox, settings.CoreSorWiz, "wail of the banshee");
          break;
        case "transmutation":
          AddSpell(comboBox, settings.CoreCleSorWiz, "etherealness");
          AddSpell(comboBox, settings.AdvpgSorWiz, "fiery body");
          AddSpell(comboBox, settings.CoreDruSorWiz, "shapechange");
          AddSpell(comboBox, settings.CoreSorWiz, "time stop");
          AddSpell(comboBox, settings.AdvpgDruSorWiz, "world wave");
          break;
        default: // Unrecognised school
          return;
      }
    }

    /// <summary>
    /// Adds the spell to the control if the content flags indicate inclusion.
    /// </summary>
    /// <param name="comboBox">The control to be populated</param>
    /// <param name="rightClass">Result of combining content flags for this spell. Populate (true), Do not include (false)</param>
    /// <param name="spellName">The spell name to populate the control with</param>
    private static void AddSpell(ComboBox comboBox, bool rightClass, string spellName)
    {
      if (!rightClass) return;

      comboBox.Items.Add(spellName);
    }
  }
}
